/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package supervision.library;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import javax.el.ELContext;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import system.general.Exc;
import system.general.Logged;
import system.general.Message;
import system.general.Persistencia;

/**
 *
 * @author emojica
 */
@ManagedBean(name = "supervision_library")
@RequestScoped
public class Main extends Beans {

    //Variables de importación General
    Logged logged;
    private Persistencia persistencia = new Persistencia();
    private Message msg = new Message();
    //Variables de importación otros modulos
    //Variables del modulo
    private Find supervision_libraryFind = new Find();
    private List<Beans> supervision_libraryList = new ArrayList<>();
    private List<request.location.Beans> sede_requestList = new ArrayList<>();
    private Respuestas respuestas = new Respuestas();
    //Variables locales
    private String sql;
    private Map<String, String> map = new LinkedHashMap<>();
    private request.status.Main request_status = new request.status.Main();
    private int idl_estatus = 0;
    private request.location.Find find_Sede = new request.location.Find();

    public Main() throws Exc, SQLException, Exception {
        ELContext elContext = FacesContext.getCurrentInstance().getELContext();
        logged = (Logged) FacesContext.getCurrentInstance().getApplication().getELResolver().getValue(elContext, null, "logged");
        load();
    }

    private void load() throws Exc, SQLException, Exception {
        setId_solicitud_sede(logged.getMasterId());
        respuestas.cargarTodasRespuestas(getId_solicitud_sede());
    }

    public void insert() {
        try {
            String respuesta;

            if (logged.getMasterId() == 0) {
                throw new Exc("m4");
            }
            //Verifica si se ha seleccionado un registro
            map.clear();
            map.put("id_solicitud_sede = " + getId_solicitud_sede(), " ");

            //Verifica si el registro existe, de lo contrario lo inserta
            if (supervision_libraryFind.byExist(map)) {
                delete();
                idl_estatus = 8;
            } else {
                idl_estatus = 7;
            }

            for (int i = 1; i < respuestas.Pregobserva.length; i++) {
                //preg=false;
                if (i == 14) {
                    setIdl_pregunta(i);
                    setIdl_respuesta(0);
                    sql = "INSERT INTO public.supervision_biblioteca (id_solicitud_sede, idl_pregunta, idl_respuesta,observacion) "
                            + "VALUES (" + getId_solicitud_sede() + ", " + getIdl_pregunta() + ",  " + respuestas.getPregunta14() + ",'" + getObservacion() + "')";

                    //Inserta los registros
                    persistencia.executeUpdate(sql);
                } else {
                    if (respuestas.Pregunta[i] != null && "null".equals(respuestas.Pregobserva[i])) {
                        for (int j = 0; j < respuestas.Pregunta[i].size(); j++) {
                            setIdl_pregunta(i);
                            setIdl_respuesta(Integer.parseInt(respuestas.Pregunta[i].get(j).toString()));
                            setObservacion(respuestas.Pregobserva[i]);
                            sql = "INSERT INTO public.supervision_biblioteca (id_solicitud_sede, idl_pregunta, idl_respuesta,observacion) "
                                    + "VALUES (" + getId_solicitud_sede() + ", " + getIdl_pregunta() + ",  " + getIdl_respuesta() + ",'" + getObservacion() + "')";
                            //Inserta los registros
                            persistencia.executeUpdate(sql);
                        }
                    } else {
                        if (respuestas.Pregobserva[i] != null) {
                            setIdl_pregunta(i);
                            setIdl_respuesta(0);
                            setObservacion(respuestas.Pregobserva[i]);
                            sql = "INSERT INTO public.supervision_biblioteca (id_solicitud_sede, idl_pregunta, idl_respuesta,observacion) "
                                    + "VALUES (" + getId_solicitud_sede() + ", " + getIdl_pregunta() + ",  " + getIdl_respuesta() + ",'" + getObservacion() + "')";

                            //Inserta los registros
                            persistencia.executeUpdate(sql);

                        }
                    }
                }
            }

            //map.clear();
            //map.put("sb.id = " + logged.getMasterId()+ "", " ");
            //supervision_libraryList =supervision_libraryFind.byMap(map);
            //this.getRequest_status().setId(supervision_libraryList.get(0).getId());
            map.clear();
            map.put("css.id= " + logged.getMasterId(), " ");
            this.sede_requestList = find_Sede.byMap(map);

            Integer id_solicitud = sede_requestList.get(0).getId_sede();

            request_status.insert(id_solicitud, idl_estatus, request_status.getRealizado(), logged.getLoggedId());
            throw new Exc("m1");

        } catch (Exc ex) {
            msg.showMsg(namePackage(), "system", ex.getIdError());
        } catch (SQLException ex) {
            msg.showErr(namePackage(), "sql", ex);
        } catch (Exception ex) {
            msg.showErr(namePackage(), "java", ex);
        } finally {
        }
    }

    public void delete() {
        try {

            if (logged.getMasterId() == 0) {
                throw new Exc("m4");
            }
            //Elimina el resgistro por el id_persona
            deleteById(logged.getMasterId());
        } catch (Exc ex) {
            msg.showMsg(namePackage(), "system", ex.getIdError());
        } catch (SQLException ex) {
            msg.showErr(namePackage(), "sql", ex);
        } catch (Exception ex) {
            msg.showErr(namePackage(), "java", ex);
        } finally {
        }
    }

    public void deleteById(int id) throws Exc, SQLException, Exception {
        //Elimina los detalle por id
        sql = "DELETE FROM public.supervision_biblioteca "
                + "WHERE id_solicitud_sede = " + id;
        persistencia.executeUpdate(sql);
    }

    public void clear() {
        logged.setDetailId(0);
        clearBeans();
    }

    public Respuestas getRespuestas() {
        return respuestas;
    }

    private String namePackage() {
        Package pack = this.getClass().getPackage();
        return pack.getName();
    }

    /**
     * @return the request_status
     */
    public request.status.Main getRequest_status() {
        return request_status;
    }
}
